package application.anno;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface FXService {

    /**
     * 被标记的service的运行时机
     *
     * @return 被标记类的运行时机 它是一个常量，会在application.constant.Constant中预先定义好
     */
    String runTime() default "";

    /**
     * 若被标记的类，并不是继承自Service，则程序会通过此注解找到此标记类的初始化方法，并且运行它
     *
     * @return 返回被标记类的初始化方法名。
     */
    String initMethod() default "";

    /**
     * 若被标记的类，并不是继承自Service，则程序会通过此注解，找到此标记类的启动方法，并且执行它。
     *
     * @return 返回被标记类的启动方法名
     */
    String startMethod() default "";

    /**
     * 若被标记的类并不是继承自Service，则程序会通过此注解，找到此标记类的停止方法，在系统要释放后台资源时，会酌情，调用此方法，停止Service，
     * 注意，此方法只是用于Service在被关闭前，做的一系列释放动作，若北邮此标记，系统释放资源时，依旧会关闭。
     *
     * @return 放回被标记类的停止方法名
     */
    String stopMethod() default "";

    /**
     * 当Service任务执行成功时，会回调被此标记的方法名。
     *
     * @return 当执行任务成功时，回调的方法的方法名。
     */
    String successCall() default "";

    /**
     * 当Service任务执行失败时，会回调被此标记的方法。
     *
     * @return 当任务执行失败时，会回调此方法。
     */
    String failedCall() default "";

    /**
     * 当Service 任务被取消时，回调此注解标记的方法。
     *
     * @return 当任务被取消时，调用此方法。
     */
    String cancelCall() default "";

    /**
     * 当类没有实现Runnable接口时，又想交由Service执行，将其注释到对应的类名上方，并给出方法名。
     *
     * @return 当对象没有实现Runnable接口时，若此注解被标注在类名上方，并且此字段不为空字符串，则框架将自动启动一个新的Service执行此方法名对应的方法。
     */
    String runnableMethod() default "";

}
